/*
 * LineaPajarosHorizontal.cpp
 *
 *  Created on: 31/10/2012
 *      Author: ignatius
 */
#include <cmath>
#include <time.h>
#include <cstdlib>
#include "LineaPajarosHorizontal.h"
#include "PajaroRojo.h"
#include "PajaroVerde.h"
#include "PajaroAzul.h"
#define ALTURA_MAXIMA 600

LineaPajarosHorizontal::LineaPajarosHorizontal(double xMinimo, double xMaximo):
	xMinimo(xMinimo), xMaximo(xMaximo) {}

Pajaro* LineaPajarosHorizontal::generarPajaro(double ticks) {
	Pajaro* pajaro = NULL;
	unsigned int valorEntero;
	unsigned int divisorEntero = 100000;
	//unsigned int resto;
	unsigned int valorNumerico;
	double seed = 10 * ticks;
	double valorDecimal;
	double divisorDecimal = 100000.0;
	srand(seed);
	valorEntero = rand() % divisorEntero;
	valorDecimal = valorEntero / divisorDecimal;
	valorNumerico = floor(valorDecimal * 9);
	double anguloAleatorio = generarAnguloAleatorio(ticks);
	double anguloInicial = anguloInicialPajaro(ticks , anguloAleatorio);
	double normaVelocidadInicial = velocidadInicialPajaro(ticks);
	int xInicial = (double)(rand() % ((int )(xMaximo - xMinimo + 1))) + 
	xMinimo;
	if (valorNumerico < 3) {
		pajaro = new PajaroRojo(anguloInicial, normaVelocidadInicial, xInicial,
		ALTURA_MAXIMA, ticks);
	}
	if ((valorNumerico > 2)&&(valorNumerico < 7)) {
		pajaro = new PajaroAzul(anguloInicial, normaVelocidadInicial, xInicial,
		ALTURA_MAXIMA, ticks);
	}
	if ((valorNumerico > 6)&&(valorNumerico < 10)) {
		pajaro = new PajaroVerde(anguloInicial, normaVelocidadInicial, xInicial,
		ALTURA_MAXIMA, ticks);
	}
	return pajaro;
}




double LineaPajarosHorizontal::anguloInicialPajaro(double ticks, double anguloAleatorio)  {
	// Sirve para determinar si sale a la dercha o izquierda
	unsigned int numeroDivisorEntero = 100000;
	unsigned int numeroAleatorioEntero;
	unsigned int resto;
	double seed = 10 * ticks;
	double numeroAleatorioDecimal;
	double numeroDivisorDecimal = (double)numeroDivisorEntero;
	unsigned int numeroAleatorioDecimalPorDiez;
	srand(seed);
	numeroAleatorioEntero = rand() % numeroDivisorEntero;
	numeroAleatorioDecimal = numeroAleatorioEntero / numeroDivisorDecimal;
	numeroAleatorioDecimalPorDiez = floor(numeroAleatorioDecimal * 10);
	resto = numeroAleatorioDecimalPorDiez % 2;
	if (resto == 0) {
		// corresponde Vx negativo
		anguloAleatorio = anguloAleatorio + M_PI;
	}
	if (resto == 1) {
		// corresponde Vx mayor que cero
		anguloAleatorio = 2 * M_PI - anguloAleatorio;
	}
	return anguloAleatorio;
}



LineaPajarosHorizontal::~LineaPajarosHorizontal() {}


